# 演示: 原函数是有参无参,有返回值无返回值, 装饰器的内部函数和原函数保持一致
# 1 定义装饰器
# 2 装饰原函数
# 3 调用装饰器


# 1 定义装饰器
def print_info(func):                       # 有嵌套 外层函数
    def inner(*args, **kwargs):             # 有嵌套 内层函数
        print('友好提示: 正在计算中...')       # 添加功能
        result = func(*args, **kwargs)     # 有引用
        return result

    return inner                           # 有返回内部函数名


# 装饰原函数  # args元组, kwargs字典
@print_info  # 相当于   get_sum = print_info(get_sum)
def get_sum(*args, **kwargs):
    print(args)
    print(type(args))       # <class 'tuple'>
    print(kwargs)
    print(type(kwargs))     # <class 'dict'>
    sum = 0
    for arg in args:
        sum += arg

    for value in kwargs.values():
        sum += value
    return sum


if __name__ == '__main__':
    result = get_sum(1, 2, 3, a=10, b=20, c=30)
    print('result-->', result)
    print('通用不定长参数装饰器 End')





